const obj = {
  subs: '画',
  lazy: 'K.M.N',
}
// Object.values -----------------------------------------
// Object.keys 返回的键 Object.values 返回值
// console.log(Object.values(obj))
// [ '画', 'K.M.N' ]
// Object.entries ----------------------------------------
// 以数组的形式返回对象当中所有的键值对
console.log(Object.entries(obj))
// [ [ 'subs', '画' ], [ 'lazy', 'K.M.N' ] ]
// for..of直接遍历
for (const [key, value] of Object.entries(obj)) {
  console.log(key, value)
}
// subs 画
// lazy K.M.N
// 将对象转换成Map类型的对象
console.log(new Map(Object.entries(obj)))
// Map(2) { 'subs' => '画', 'lazy' => 'K.M.N' }
// Object.getOwnPropertyDescriptors ----------------------
// 获取属性的完整描述信息 配合get/set属性使用 获取get/set的function
// getter/setter
const p1 = {
  firstName: 'jin',
  lastName: 'yuxi',
  get fullName() {
    return this.firstName + ' ' + this.lastName
  },
}
console.log(p1.fullName) // jin yuxi
const p2 = Object.assign({}, p1)
p2.firstName = 'chen'
console.log(p2.fullName) // jin yuxi
const descriptors = Object.getOwnPropertyDescriptors(p1)
console.log(descriptors)
// {
//   firstName: {
//     value: 'jin',
//     writable: true,
//     enumerable: true,
//     configurable: true
//   },
//   lastName: {
//     value: 'yuxi',
//     writable: true,
//     enumerable: true,
//     configurable: true
//   },
//   fullName: {
//     get: [Function: get fullName],
//     set: undefined,
//     enumerable: true,
//     configurable: true
//   }
// }
const p3 = Object.defineProperties({}, descriptors)
p3.lastName = 'jiaodawang'
console.log(p3.fullName) // jin jiaodawang
// String.prototype.padStart/String.prototype.padEnd
const obj2 = {
  subs: 111,
  lazy: 1111,
  shengfan: 11111,
}
for (const [singer, rank] of Object.entries(obj2)) {
  // console.log(singer, rank)
  // 无对齐
  // subs 111
  // lazy 1111
  // shengfan 11111
  // 值不是str需要调用toString
  console.log(`${singer.padEnd(10, '-')}| ${rank.toString().padStart(5, '0')}`)
}
// 用给定字符串填充开始或结束位置 直到达到了指定长度为止
// 允许函数的参数列表的最后一位添加结束的尾逗号 trailingComma
// 这样的话每行的格式均一致 调整容易
// 新建一行直接添加元素, 因为原来有尾逗号~~~ 更精确的定位代码发生变化的位置
// 新建只影响一行 而不是之前的两行
function foo(barrrr, wulaaa,) {}
const arr = [
  100, 
  300,
  200,
  400,
]
// async await
// Promise的语法糖